<?php

namespace app\common\model\daily;

use think\Model;

/**
 * 会员模型
 */
class UsersModel extends Model
{
    protected $connection = 'database';//连接配置

    // 表名
    protected $name = 'user';


    /*score:积分；youth_coin：青年币*/
    /**
     * 增加用户的货币或分数
     *
     * 该方法用于增加用户账户中的特定类别（如分数或青年币）的数值，并记录相应的日志
     * 它首先获取用户的当前信息，然后增加指定的类别数值，最后记录这次增加的操作
     *
     * @param int $user_id 用户ID，用于标识哪个用户的货币或分数需要增加
     * @param int $num 要增加的数量，默认为0，可以根据需要增加特定数量
     * @param string $cat 要增加的类别，默认为'score'，可以是数据库中用户的任意字段如'score'或'youth_coin'
     * @param string $memo 操作备注，用于记录这次增加操作的原因或说明，默认为空字符串
     *
     * @return bool 总是返回true，表示操作执行了注意，实际操作的成功与否应该通过检查数据库操作的结果来确定
     */
    public static function increaseUserCurrency($user_id, $num  = 0, $cat = 'score', $memo = ''){
        // 获取用户当前的id, score, youth_coin信息，以便后续操作
        $users  = self::field('id,score,youth_coin')->where('id', $user_id)->find();

        // 执行增加操作，针对指定的类别增加指定的数量
        if(!$res = self::where('id', $user_id)->setInc($cat, $num)){
            return false;
        }

        // 记录用户货币或分数增加的日志，包括用户ID，增加数量，类别，操作前和操作后的数值，以及备注
        UsersScoreLogModel::increaseUserLog($user_id, $num, $cat, $users[$cat], $users[$cat] + $num, $memo );

        // 表示操作执行了，实际应检查数据库操作结果以确定操作成功与否
        return true;
    }

    /**
     * 减少用户的某种货币数量，并记录日志
     *
     * @param int $user_id 用户ID，用于识别特定用户
     * @param int $num 要减少的货币数量，默认为0
     * @param string $cat 货币类别，默认为'score'，用于指定要减少的货币类型
     * @param string $memo 备注，用于记录减少货币的原因或相关说明
     * @return bool 函数执行成功与否，成功返回true，失败返回false
     */
    public static function decreaseUserCurrency($users_id, $num  = 0, $cat = 'score', $memo = ''){
        // 检查用户账户中是否有足够的货币余额
        $users  = self::field('id,score,youth_coin')->where('id', $users_id)->where($cat, '>=', $num)->find();
        if(!$users){
            return false;
        }
        // 减少用户账户中的货币数量
        if(!$res = self::where('id', $users_id)->setDec($cat, $num)){
            return false;
        }
        // 记录用户货币减少的日志
        UsersScoreLogModel::decreaseUserLog($users_id, $num, $cat, $users[$cat], $users[$cat] - $num, $memo );
        return true;
    }
}